﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DAOAcademias;
using TOAcademias;

namespace BOAcademias
{
    public class BOPlanificarAcademia
    {
        
        private  DOAcademia doAcademia;
        private DOPeriodo doPeriodo;
        private DOPlanificacion doPlanificacion;
        private DOInstructor doInstructor;

          private DOSeccion doSeccion;

       


        


        public BOPlanificarAcademia()
        {
            doAcademia = new DOAcademia();
            doPeriodo= new DOPeriodo();
            doPlanificacion = new DOPlanificacion();
            doSeccion = new DOSeccion();
            doInstructor = new DOInstructor();
        }

        public List<TOSeccion> obtenerSecciones(String codigoPlanificacion)
        {

            List<TOSeccion> listaSecciones=doSeccion.obtenerSecciones(codigoPlanificacion);
            List<TOInstructor> listaInstructores = obtenerInstructore();

            foreach (TOSeccion toSeccion in listaSecciones) {

                TOInstructor toInstructor= listaInstructores.Find(delegate(TOInstructor bk)
                {

                    return bk.Codigo == toSeccion.Cod_instructor;
                });

                toSeccion.Cod_instructor = toInstructor.NombreCompleto;
            }


            return listaSecciones;
        }

        public List<TOInstructor> obtenerInstructore() {

            return doInstructor.obtenerInstructores();
        }

        public List<TOAcademia> obtenerAcademiasActivas()
        {
            return doAcademia.obtenerAcademiasActivas();
        }

        public TOPeriodo obtenerPeriodoActivo()
        {
            return doPeriodo.obtenerPeriodoActivo();
        }

        public List<TOPlanificacion> obtenerPlanificacionesXPeriodo(String periodo)
        {
            return doPlanificacion.obtenerPlanificacionesXPeriodo(periodo);
        }

        public List<TOAcademia> obtenerAcademiasHabiles()
        {
            TOPeriodo toPeriodo= doPeriodo.obtenerPeriodoActivo();
            
            List<TOPlanificacion> listaPlanificacion = doPlanificacion.obtenerPlanificacionesXPeriodo(toPeriodo.Codigo);

            List<TOAcademia> listaAcademias = doAcademia.obtenerAcademiasActivas();

            List<TOAcademia> listaAcademiasAux = new List<TOAcademia>();

            foreach(TOPlanificacion toPlanificacion in listaPlanificacion ){

                TOAcademia toAcademia = listaAcademias.Find(delegate(TOAcademia bk)
                {

                    return bk.Cod_Academia == toPlanificacion.Cod_Academia;
                });


                toAcademia.Cod_Academia = toPlanificacion.Cod_Planificacion;
                listaAcademiasAux.Add(toAcademia);
            
            }
        
            


            return listaAcademiasAux;
        }

       

        public void actualizarPlanificaciones(List<TOAcademia> listaAcademias)
        {

            TOPeriodo periodoActivo = doPeriodo.obtenerPeriodoActivo();
            List<TOPlanificacion> listaPlanificaciones = doPlanificacion.obtenerPlanificacionesXPeriodo(periodoActivo.Codigo);

            
           // listaPLanificaciones.Find

            foreach (TOAcademia toAcademia in listaAcademias) {

                TOPlanificacion toPlanificacion = listaPlanificaciones.Find(delegate(TOPlanificacion bk)
                {

                    return bk.Cod_Academia == toAcademia.Cod_Academia;
                });

                if (toPlanificacion != null)
                {      
                        if(toAcademia.PlanSeleccion){
                            toPlanificacion.Estado="ACTIVO";
                        }else{
                            toPlanificacion.Estado = "INACTIVO";
                        }
                        
                 
                        doPlanificacion.modificarPlanificacion(toPlanificacion);
                }
                else {

                    if (toAcademia.PlanSeleccion)
                    {
                        TOPlanificacion toPlanAux = new TOPlanificacion();
                        toPlanAux.Cod_Academia = toAcademia.Cod_Academia;
                        toPlanAux.Cod_Periodo = periodoActivo.Codigo;
                        toPlanAux.Estado = "ACTIVO";

                        doPlanificacion.insertarPlanificacion(toPlanAux);
                    }
                }

            }
            

        }
    }
}
